const fs = require('fs');
const path = require('path');
const { promisify } = require('util');
const glob = promisify(require('glob'));
const { addPathComment } = require('./utils');

// 支持的代码文件扩展名
const CODE_EXTENSIONS = [
  'js', 'jsx', 'ts', 'tsx', 'html', 'htm', 'css', 'scss', 'less',
  'py', 'rb', 'java', 'php', 'go', 'rs', 'swift', 'kt', 'sh'
];

// 处理单个文件
async function processFile(filePath, baseDir) {
  try {
    const content = await fs.promises.readFile(filePath, 'utf8');
    const relativePath = path.relative(baseDir, filePath);
    return addPathComment(content, relativePath, filePath);
  } catch (error) {
    console.error(`处理文件 ${filePath} 时出错: ${error.message}`);
    return null;
  }
}

// 处理目录中的所有代码文件
async function processDirectory(dirPath, options = {}) {
  const { ignore = ['node_modules', '.git', 'dist', 'build'] } = options;
  const absoluteDirPath = path.resolve(dirPath);
  
  // 修复：使用正确的 glob 模式语法
  const pattern = `**/*.{${CODE_EXTENSIONS.join(',')}}`;
  
  try {
    // 获取所有匹配的文件
    const files = await glob(pattern, {
      cwd: absoluteDirPath,
      nodir: true,
      absolute: true,
      ignore: ignore.map(item => `**/${item}/**`)
    });
    
    // 处理所有文件
    const results = await Promise.all(
      files.map(file => processFile(file, absoluteDirPath))
    );
    
    // 过滤掉处理失败的文件
    return results.filter(Boolean).join('\n\n' + '='.repeat(80) + '\n\n');
  } catch (error) {
    throw new Error(`文件匹配错误: ${error.message}`);
  }
}

module.exports = {
  processDirectory
};